/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cadastro;

import java.awt.Component;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import principalcontrole.principal;
import utilitario.Arquivo;
import utilitario.busca;
import utilitario.cad_produto;
import utilitario.produtos_estoque;
import utilitario.vendidos;

/**
 *
 * @author rodrig0
 */
public class produtoFunciona extends javax.swing.JFrame {

    //listas de produtos cadastrados e de produtos cuja entrega foi confirmada
    public ArrayList<cad_produto> listaProdutos = new ArrayList<>();
    public ArrayList<produtos_estoque> listaConfirmados = new ArrayList<>();
    principal a;
    /**
     * Creates new form produtoFunciona
     */
      public produtoFunciona(principal a) {
        this();
        this.a = a;
    }
    public produtoFunciona() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        pnlPrincipal = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        txtCodigo = new javax.swing.JTextField();
        txtNome = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        txtQuantidade = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        txtPrecoCompra = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        txtPrecoVenda = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        txtIcns = new javax.swing.JTextField();
        jLabel8 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tblProdutosCadastrados = new javax.swing.JTable();
        jLabel9 = new javax.swing.JLabel();
        txtDescricao = new javax.swing.JTextField();
        btnCadastrar = new javax.swing.JButton();
        jScrollPane2 = new javax.swing.JScrollPane();
        tblProdutosConfirmados = new javax.swing.JTable();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setMinimumSize(new java.awt.Dimension(805, 625));
        setResizable(false);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosed(java.awt.event.WindowEvent evt) {
                formWindowClosed(evt);
            }
            public void windowOpened(java.awt.event.WindowEvent evt) {
                formWindowOpened(evt);
            }
        });
        getContentPane().setLayout(null);

        pnlPrincipal.setBackground(new java.awt.Color(255, 255, 255));
        pnlPrincipal.setLayout(null);

        jLabel3.setText("Código do Produto:");
        pnlPrincipal.add(jLabel3);
        jLabel3.setBounds(217, 11, 110, 14);

        txtCodigo.setEditable(false);
        pnlPrincipal.add(txtCodigo);
        txtCodigo.setBounds(215, 31, 110, 28);

        txtNome.setEditable(false);
        pnlPrincipal.add(txtNome);
        txtNome.setBounds(335, 31, 185, 28);

        jLabel4.setText("Nome:");
        pnlPrincipal.add(jLabel4);
        jLabel4.setBounds(337, 11, 80, 14);

        txtQuantidade.setEditable(false);
        pnlPrincipal.add(txtQuantidade);
        txtQuantidade.setBounds(538, 31, 116, 28);

        jLabel5.setText("Quantidade:");
        pnlPrincipal.add(jLabel5);
        jLabel5.setBounds(540, 10, 90, 14);

        txtPrecoCompra.setEditable(false);
        pnlPrincipal.add(txtPrecoCompra);
        txtPrecoCompra.setBounds(210, 90, 164, 28);

        jLabel6.setText("Preço de Compra:");
        pnlPrincipal.add(jLabel6);
        jLabel6.setBounds(220, 70, 130, 14);
        pnlPrincipal.add(txtPrecoVenda);
        txtPrecoVenda.setBounds(390, 90, 164, 28);

        jLabel7.setText("Preço de Venda:");
        pnlPrincipal.add(jLabel7);
        jLabel7.setBounds(390, 70, 120, 14);
        pnlPrincipal.add(txtIcns);
        txtIcns.setBounds(560, 90, 92, 28);

        jLabel8.setText("ICNS:");
        pnlPrincipal.add(jLabel8);
        jLabel8.setBounds(560, 70, 70, 14);

        tblProdutosCadastrados.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Código", "Nome", "Estoque", "Preço de Compra", "Preço de Venda"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane1.setViewportView(tblProdutosCadastrados);
        tblProdutosCadastrados.getColumnModel().getColumn(0).setPreferredWidth(50);
        tblProdutosCadastrados.getColumnModel().getColumn(1).setPreferredWidth(300);
        tblProdutosCadastrados.getColumnModel().getColumn(2).setPreferredWidth(100);
        tblProdutosCadastrados.getColumnModel().getColumn(3).setPreferredWidth(100);
        tblProdutosCadastrados.getColumnModel().getColumn(4).setPreferredWidth(100);

        pnlPrincipal.add(jScrollPane1);
        jScrollPane1.setBounds(21, 225, 720, 106);

        jLabel9.setText("Descrição:");
        pnlPrincipal.add(jLabel9);
        jLabel9.setBounds(210, 130, 80, 14);
        pnlPrincipal.add(txtDescricao);
        txtDescricao.setBounds(212, 148, 230, 28);

        btnCadastrar.setText("Cadastrar");
        btnCadastrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCadastrarActionPerformed(evt);
            }
        });
        pnlPrincipal.add(btnCadastrar);
        btnCadastrar.setBounds(460, 147, 110, 23);

        tblProdutosConfirmados.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Produtos há cadastrar"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tblProdutosConfirmados.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                tblProdutosConfirmadosMouseReleased(evt);
            }
        });
        tblProdutosConfirmados.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                tblProdutosConfirmadosKeyReleased(evt);
            }
        });
        jScrollPane2.setViewportView(tblProdutosConfirmados);

        pnlPrincipal.add(jScrollPane2);
        jScrollPane2.setBounds(10, 10, 190, 160);

        getContentPane().add(pnlPrincipal);
        pnlPrincipal.setBounds(20, 170, 760, 380);

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/fundo_fornecedor.png"))); // NOI18N
        getContentPane().add(jLabel1);
        jLabel1.setBounds(0, 0, 800, 600);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened
        //lendo lista de produtos ja cadastrados e lista de produtos cuja entrega ja foi confirmada
        listaProdutos = Arquivo.lerProduto();
        listaConfirmados = Arquivo.lercPedido();



        //verificando se ja há um registro de um produto cuja entrega foi confimada
        //caso haja a quantidade em estoque será atualizada
        confirma_atualiza_estoque();

        //criando as linhas da tabela de produtos preenchidos
        for (int i = 0; i < listaProdutos.size(); i++) {
            addLinha();
        }

        //preenchendo tabela
        preencherTabela(listaProdutos.size());

        for (int i = 0; i < listaConfirmados.size(); i++) {
            addLinhaTabelaNome();
        }

        //colocando opçoes ha serem cadastradas na combo box
        preencherProdutosConfirmados(listaConfirmados.size());
    }//GEN-LAST:event_formWindowOpened

    private void btnCadastrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCadastrarActionPerformed

        //verificando se há algum campo vazio excluindo o campo dedescrição
        if (campoVazio()) {
            return;
        }
        int selecionado = tblProdutosConfirmados.getSelectedRow();
        cad_produto produtoAtual = new cad_produto();
        produtoAtual.setCodigo(txtCodigo.getText());
        produtoAtual.setNome(txtNome.getText());
        produtoAtual.setQunatidade(Integer.parseInt(txtQuantidade.getText()));
        produtoAtual.setPre_compra(Double.parseDouble(txtPrecoCompra.getText()));
        produtoAtual.setPre_venda(Double.parseDouble(txtPrecoVenda.getText()));
        produtoAtual.setIcms(Double.parseDouble(txtIcns.getText()));
        produtoAtual.setDescriçao(txtDescricao.getText());

        //removendo linhas da tabela
        for (int i = 0; i < listaProdutos.size(); i++) {
            removeLinha(0, tblProdutosCadastrados);
        }
        //adicionando produto atual na lista
        listaProdutos.add(produtoAtual);

        //adicionando quantidade de linhas necessárias na tabela
        for (int i = 0; i < listaProdutos.size(); i++) {
            addLinha();
        }

        //preenchendo tabela
        preencherTabela(listaProdutos.size());

        for (int i = 0; i < listaConfirmados.size(); i++) {
            removeLinha(0, tblProdutosConfirmados);
        }

        listaConfirmados.remove(selecionado);

        for (int i = 0; i < listaConfirmados.size(); i++) {
            addLinhaTabelaNome();
        }

        preencherProdutosConfirmados(listaConfirmados.size());

        Arquivo.armazenarcPedido(listaConfirmados);
        Arquivo.armazenarProduto(listaProdutos);
    }//GEN-LAST:event_btnCadastrarActionPerformed

    private void tblProdutosConfirmadosMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tblProdutosConfirmadosMouseReleased
        int selecionado = tblProdutosConfirmados.getSelectedRow();
        txtNome.setText(listaConfirmados.get(selecionado).getNome());
        txtCodigo.setText((listaProdutos.size() + 1) + "");
        txtPrecoCompra.setText(listaConfirmados.get(selecionado).getPreco() + "");
        txtQuantidade.setText(listaConfirmados.get(selecionado).getQtd() + "");


        // TODO add your handling code here:
    }//GEN-LAST:event_tblProdutosConfirmadosMouseReleased

    private void tblProdutosConfirmadosKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tblProdutosConfirmadosKeyReleased
        if (evt.getKeyCode() == 40 || evt.getKeyCode() == 38) {
            int selecionado = tblProdutosConfirmados.getSelectedRow();
            txtNome.setText(listaConfirmados.get(selecionado).getNome());
            txtCodigo.setText((listaProdutos.size() + 1) + "");
            txtPrecoCompra.setText(listaConfirmados.get(selecionado).getPreco() + "");
            txtQuantidade.setText(listaConfirmados.get(selecionado).getQtd() + "");
        }


            // TODO add your handling code here:
    }//GEN-LAST:event_tblProdutosConfirmadosKeyReleased

    private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed
        // TODO add your handling code here:
        a.setEnabled(true);
        Thread t = new Thread();
        t.start();

    }//GEN-LAST:event_formWindowClosed

        //verificando registro de produtos e atualizando estoque caso produto confirmado ja possua um registro


    public void confirma_atualiza_estoque() {
        String produtosAtualizados = "";
        int tamanhoInicial = listaConfirmados.size();

        //verificando se lista de produtos cadastrados esta vazio
        if (!listaProdutos.isEmpty()) {
            for (int i = 0; i < listaConfirmados.size(); i++) {
                int posicaoEstoque = busca.indexDoCampo(listaProdutos, listaConfirmados.get(i).getNome(), "getNome");
                if (posicaoEstoque != -1) {
                    listaProdutos.get(posicaoEstoque).setPre_compra(listaConfirmados.get(i).getPreco());
                    listaProdutos.get(posicaoEstoque).setQunatidade(listaProdutos.get(posicaoEstoque).getQuantidade() + listaConfirmados.get(i).getQtd());
                    listaConfirmados.remove(i);
                    produtosAtualizados = produtosAtualizados + listaProdutos.get(posicaoEstoque).getNome() + "\n";
                    i--;
                }
            }
            if (listaConfirmados.size() != tamanhoInicial) {
                JOptionPane.showMessageDialog(rootPane, "Os seguintes produtos tiveram seus estoques atualizados\n\n" + produtosAtualizados);
                Arquivo.armazenarcPedido(listaConfirmados);
            }
        }
    }

    //preenchendo combo box com os produtos ha serem cadastrados
    public void preencherProdutosConfirmados(int tamanhoLista) {
        for (int i = 0; i < tamanhoLista; i++) {
            tblProdutosConfirmados.getModel().setValueAt(listaConfirmados.get(i).getNome(), i, 0);
        }
    }

    //metodo para preencher tabela com produtos cadastrados
    public void preencherTabela(int tamanhoLista) {
        for (int i = 0; i < tamanhoLista; i++) {
            tblProdutosCadastrados.getModel().setValueAt(listaProdutos.get(i).getCodigo(), i, 0);
            tblProdutosCadastrados.getModel().setValueAt(listaProdutos.get(i).getNome(), i, 1);
            tblProdutosCadastrados.getModel().setValueAt(listaProdutos.get(i).getQuantidade() + "", i, 2);
            tblProdutosCadastrados.getModel().setValueAt(listaProdutos.get(i).getPre_compra() + "", i, 3);
            tblProdutosCadastrados.getModel().setValueAt(listaProdutos.get(i).getPre_venda() + "", i, 4);
        }
    }

    //metodos de adicionar e remover uma linha na tabela
    private void addLinha() {
        DefaultTableModel c = (DefaultTableModel) tblProdutosCadastrados.getModel();
        Object[] linha = {null, null, null, null, null};
        c.addRow(linha);
    }

    private void addLinhaTabelaNome() {
        DefaultTableModel c = (DefaultTableModel) tblProdutosConfirmados.getModel();
        Object[] linha = {null};
        c.addRow(linha);
    }

    private void removeLinha(int posicao, JTable lista) {
        DefaultTableModel c = (DefaultTableModel) lista.getModel();
        c.removeRow(posicao);
    }

    //verificando se existe algum campo vazio
    public boolean campoVazio() {
        for (Component c : pnlPrincipal.getComponents()) {
            if (c instanceof JTextField) {
                if (c.equals(txtDescricao)) {
                    continue;
                }
                if (((JTextField) c).getText().equals("")) {
                    JOptionPane.showMessageDialog(rootPane, "Existe algum(s) campo(s) vazio(s)");
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(produtoFunciona.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(produtoFunciona.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(produtoFunciona.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(produtoFunciona.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new produtoFunciona().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCadastrar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JPanel pnlPrincipal;
    private javax.swing.JTable tblProdutosCadastrados;
    private javax.swing.JTable tblProdutosConfirmados;
    private javax.swing.JTextField txtCodigo;
    private javax.swing.JTextField txtDescricao;
    private javax.swing.JTextField txtIcns;
    private javax.swing.JTextField txtNome;
    private javax.swing.JTextField txtPrecoCompra;
    private javax.swing.JTextField txtPrecoVenda;
    private javax.swing.JTextField txtQuantidade;
    // End of variables declaration//GEN-END:variables
}
